# 复制整行： Ctrl + D
# 格式化：Ctrl + Alt + L
# 整体标注：Ctrl + /
import sys

# 查看各个类型
print(f"Hello 的类型{type("hello")}")
print(f"123 的类型{type(123)}")
print(f"True 的类型{type(True)}")
print(f"1.2 的类型{type(1.2)}")
print(f"* 的类型{type((1, 2, 4))}")

# Int型（4300个数字）
a = 999 ** 1433
print(a)

# 各种进制

print(0b10)  # 二进制
print(10)  # 十进制
print(0x10)  # 十六进制
print(0o10)  # 八进制

# 字节随着增量的增大而增大且每次增大四位

a = 1
b = 2 ** 10
c = 2 ** 30
d = 2 ** 88
print(a, sys.getsizeof(a), "类型", type(a))
print(b, sys.getsizeof(b), "类型", type(b))
print(c, sys.getsizeof(c), "类型", type(c))
print(d, sys.getsizeof(d), "类型", type(d))

from decimal import Decimal

# 解决小数精度问题,（java暂时无法解决这个问题？）
b = Decimal("8.1") / Decimal("3")
print(b)

# 布尔值类型可以和其他数据类型进行比较，比如数字，字符串等。在比较时
# python会把True视为1    False视为0
c = False
d = True
print(c + 1)
print(d + 1)

# if只要后面不跟0，就判定为真，否则为假
if 1.1:
    print("nice")

if 0:
    print("zero")

if "kite":
    print("kite")

# 三个单引号或者三个双引号可以原封不动输出你想要输出的任意内容

a = """import sys  # 导入 sys 模块

a = 1
b = 2 ** 10
c = 2 ** 30
d = 2 ** 88

print(a, sys.getsizeof(a), "类型", type(a))
print(b, sys.getsizeof(b), "类型", type(b))
print(c, sys.getsizeof(c), "类型", type(c))
print(d, sys.getsizeof(d), "类型", type(d))"""

print(a)

# 在输出内容前面加上r可以强制取消转置符的作用
print(r"123\t456\n789\t0")

# 驻留机制（仅限交互式，pycharm优化了这些现象）
"""
1.字符串是由26个英文字母大小写，0-9，_组成
2.字符串长度为0或者1时
3.字符串在编译时进行驻留
4.[-5,256]的整数数字
5.sys中的intern方法可以强制两个字符串指向同一个对象

"""

# 转换机制

""" 
#1
不管什么值的int,float都可以转成str,
str(x)将对象转成字符串
"""
a1 = 1
a2 = 1.1
print(str(a1), type(str(a1)))
print(str(a2), type(str(a2)))

"""
#2
int转成float时，会增加小数部分比如123->123.0,
float转成int时,会去掉小数部分比如123.0->123.
"""
e = 123
print(float(e))
f = 123.12
print(int(f))

"""
#3
str转int,float 使用int(x),float(x)将对象转化为int/float
"""
a3 = "12.5"
print(float(a3))
# print(int(a3))  # 报错

"""
#4
在str类型转成基本数据类型时，要确保str值能够转成有效的数据，比如我们可以把“123”
转成一个整数，但是不能把“hello”转成一个整数，如果格式不正确，程序会报ValueError
程序终止
"""
a4 = "hello"
# print(int(a4))#报错
a5 = "123"
print(int(a5))

"""
#5
对一个变量进行强制转换，会返回一个数据/值，并不会影响原变量的数据类型
"""
# 小小作业
a10 = "1"
a11 = "2"
a12 = "3"
print(r"\n")
print(r"\t")
print(r"\\")
print(r"\r")
print(a10)
print(a11)
print(a12)
a6 = "书本1"
a7 = "书本2"
a8 = 99.5
a100 = 1.5
print(a6 + "\t" + a7)
print(str(a8) + "\t" + str(a100))

name = "王大锤"
age = 88
score = 99
gender = '男'
hobby = "月抛"
print("姓名:" + "\t" + "年龄" + "\t" + "成绩" + "\t" + "性别" + "\t" + "爱好" + "\n"
      + name + "\t" + str(age) + "\t" + str(score) + "\t" + gender + "\t" + hobby + "\n")

print("""
姓名    年龄    成绩    性别    爱好   
王大锤   88      8       男     月抛
""")
